home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
util
/
rexx
/
kj01.lha
/
kj01.fred
Wrap
Text File
|
1994-12-23
|
20KB
|
846 lines
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_
o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
** SaveToSANYO.fred
**
** $VER: SaveToSANYO.fred 1.0.0 (20.12.94)
**
** See SaveToSANYO.fred.pre for complete documentation.
**
** We don't care if there is any image data in the current
** buffer, since a previously called saver will have displayed
** it on graphics board already.
**
** Clips Imported:
** FREDSANTimeCode - Starting NDF SMPTE timecode
** FREDSANSFlimit - Threshold value for the number of
** single frame edits per cell
** which will cause a single multi-
** frame APND
**
** NOTE: Clip names are case sensitive.
**
** This script requires FRED v1.4.0 (or higher) to run. Also
** required is ADPro v2.5.0 (or higher).
**
** Copyright 1994 SyntheToonz, Inc., Kenneth Jennings
** All Rights Reserved
**
** Internet: kenneth@daffy.aatech.com
*/
ADDRESS "ADPro"
OPTIONS RESULTS
PARSE ARG FrameNum FrameFName Length LoadFlag FirstCallSeq FirstCallCell
NL = '0A'X
SQ = '27'X
DQ = '22'X
TRUE = 1
FALSE = 0
NULLSTRING = DQ || DQ
/*
** Get the required clips.
*/
TimeCode = GETCLIP( "FREDSANTimeCode" )
IF (TimeCode = "") THEN DO
ADPRO_TO_FRONT
OKAY1 "Required clip, FREDSANTimeCode," || NL ||,
"is not specified."
SCREEN_TO_FRONT "FRED"
EXIT 10
END
SFlimit = GETCLIP( "FREDSANSFlimit" )
IF (SFlimit = "") THEN DO
ADPRO_TO_FRONT
OKAY1 "Required clip, FREDSANSFlimit," || NL ||,
"is not specified."
SCREEN_TO_FRONT "FRED"
EXIT 10
END
/*
** Try to startup the AREXX communications handler
*/
RXPort = StartRXComm()
IF (RXPort = NULLSTRING) THEN DO
ADPRO_TO_FRONT
OKAY1 "Unable to start ARexx" || NL ||,
"communications handler."
SCREEN_TO_FRONT "FRED"
EXIT 10
END
/*
** If this is frame 1 then send setup string
** and starting timecode to deck
*/
IF (FirstCallSeq = 1) THEN DO
CmdString = RX SQ||ADDRESS RXPort DQ||'EDTP5;INIT;EDOT:'||TimeCode||DQ||SQ
ADDRESS 'COMMAND' CmdString
END
/*
** If frame count per cell is less than the single
** frame edit threshold then loop for each edit.
**
** Met or exceeded threshold means we do a single
** edit for the multiple frames in this cell.
*/
IF (Length < SFlimit) THEN DO
Count = 1
DO WHILE (Count <= Length)
CmdString = RX SQ||ADDRESS RXPort DQ||'APND 1'||DQ||SQ
ADDRESS 'COMMAND' CmdString
Count = Count + 1
END
END
ELSE DO
CmdString = RX SQ||ADDRESS RXPort DQ||'APND '||Length||DQ||SQ
ADDRESS 'COMMAND' CmdString
END
EXIT 0
StartRXComm:
Handler1 = "SANARexxHandler"
Handler2 = "BCDARexxHandler"
IF (EitherPort() = NULLSTRING) THEN
CALL StartProgram(Handler1)
IF (EitherPort() = NULLSTRING) THEN
CALL StartProgram(Handler2)
RETURN EitherPort()
StartProgram:
PARSE ARG ProgName
Max_Seconds_To_Load = 3
Flag = FALSE
TIME( 'R' )
DO WHILE ( (TIME( 'E' ) < Max_Seconds_To_Load) & (EitherPort() = NULLSTRING))
IF (Flag = FALSE) THEN DO
CmdString = "Run <NIL: >NIL:" ProgName "-t30 -a"
ADDRESS 'COMMAND' CmdString
Flag = TRUE
END
ADDRESS 'COMMAND' 'Wait 1'
END
RETURN
EitherPort:
RXPort1 = "SANARexx.port"
RXPort2 = "BCDAREXX.PORT"
IF (FindPort(RXPort1) ~= NULLSTRING) THEN
RETURN RXPort1
IF (FindPort(RXPort2) ~= NULLSTRING) THEN
RETURN RXPort2
RETURN NULLSTRING
FindPort:
PARSE ARG PortName
IF ( SHOW( 'Ports', PortName ) = FALSE) THEN
RETURN NULLSTRING
RETURN PortName
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_
o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
** SaveToSANYO.fred.pre
**
** $VER: SaveToSANYO.fred.pre 1.0.0 (20.12.94)
**
** SaveToSANYO.fred.pre documentation:
**
** If the SaveToSANYO.fred script appears in the InvokeADPro
** list, this program will ask the user to select the
** starting NDF SMPTE timecode, and the single frame/multi-
** frame edit threshold.
**
** The SMPTE timecode validation is fairly unforgiving, since
** it requires all the digits (including leading zeros) be
** present, but at least it prevents bogus values. My excuse
** is that I wrote it in ten minutes.
**
** SaveToSANYO.fred documentation:
**
** This program can be run from an InvokeADPro list to save
** images to the SANYO GVR-S950 (or compatible BCD equipment)
** single frame VTR. Including this program automatically
** causes a pre script to be executed as well to ask the user
** to select the communication command filename, the starting
** timecode, and the single frame/multiple frame edit threshold.
**
** Normally, multiple frames per cell will result in a single
** frame edit for each frame. If the number of frames exceeds
** or equals the given threshold, then a single APND event will
** occur for the cell. We at SyntheToonz find this useful to
** make the 10 second (300 frame) static images at the beginning
** and end of the animations which make editing from the ani-
** mation master tape to another tape easier. It is not a good
** idea to use the threshold to make pauses in the middle of a
** rolling animation. In our experience, the video signal
** shifts and the quality visibly changes, and even with a TBC
** the video playback is still not stable.
**
** Note: Communications with the deck is accomplished by sending
** commands to the ARexx port of another program which actually
** handles talking to the deck. The script will first try to
** locate the port SANARexx.port, and then the port
** BCDAREXX.PORT. If neither port is located, then the program
** will first attempt to run the SANARexxHandler program, and
** then the BCDARexxHandler program. Afterwards, the script
** will try to find one of the Arexx ports again. If the script
** still fails, then the user is notified of the problem.
**
** Note also: This program is tested on the SANYO GVR-S950 deck
** using the SANARexxHandler program. While the documentation
** (based largely on information from BCD) says the ARexx port
** to use is called SANARexx.port, it really is BCDAREXX.PORT.
** Since I get the feeling SANYO is trying hard to SANYO-tize
** their documentation and supporting programs, I believe at
** some point in the future the ARexx port name will change to
** what is documented in their manual.
**
** Those fluent in ARexx may wonder why the ARexx communication
** with the BCD/SANARexx.port is so convoluted. The reason is,
** that after exhaustive testing, this is the only way the port
** would accept and process commands on our system. The
** development system is an A2000 with a GVP 33MHz 040 with a
** Toaster. We adamantly avoid running PD hacks or even the
** standard commodities on our system. The ARexx communications
** work if a command is manually typed and executed in the Shell
** with the RX command. The exact same command sent to the
** BCD/SANARexx.port from a script fails. There is no error and
** no results, as if the command were diverted or suppressed
** before it reached the port. Anyway, communication is
** accomplished by building a messy RX command string with the
** necessary embedded quotes and using the Shell to execute the
** generated command string. This is messy, but at least it
** works.
**
** Clips Exported:
** FREDSANTimeCode - Starting NDF SMPTE timecode
** FREDSANSFlimit - Threshold value for the number of
** single frame edits per cell
** which will cause a single multi-
** frame APND
**
** NOTE: Clip names are case sensitive.
**
** This script requires FRED v1.4.0 (or higher) to run. Also
** required is ADPro v2.5.0 (or higher).
**
** Copyright 1994 SyntheToonz, Inc., Kenneth Jennings
** All Rights Reserved
**
** Internet: kenneth@daffy.aatech.com
*/
ADDRESS "ADPro"
OPTIONS RESULTS
PARSE ARG NumberOfCells NumberOfFrames
NL = '0A'X
SQ = '27'X
DQ = '22'X
TRUE = 1
FALSE = 0
NULLSTRING = DQ || DQ
ValidTC = FALSE
ADPRO_TO_FRONT
/*
** Ask the user to enter the starting timecode.
*/
TimeCode = "00:00:00:00"
DO loop=1 UNTIL (ValidTC = TRUE)
Message = "Enter starting NDF SMPTE" || NL || "timecode as HH:MM:SS:FF"
CALL "FREDSCRIPTS:FREDFunctions/GetAString" '"'Message'"' '"'TimeCode'"' TRUE
TimeCode = RESULT
IF (TimeCode = NULLSTRING) THEN
EXIT 10
TimeCode = STRIP(TimeCode)
IF (LENGTH(TimeCode) ~= 11) THEN DO
Message = "Invalid SMPTE TimeCode" || NL || "(Length)"
OKAY1 '"'Message'"'
ITERATE loop
END
Sep1 = SUBSTR(TimeCode, 3, 1)
Sep2 = SUBSTR(TimeCode, 6, 1)
Sep3 = SUBSTR(TimeCode, 9, 1)
IF (Sep1 ~= ':') | (Sep2 ~= ':') | (Sep3 ~= ':') THEN DO
Message = "Invalid SMPTE TimeCode" || NL || "(: separators)"
OKAY1 '"'Message'"'
ITERATE loop
END
HHdigits = SUBSTR(TimeCode, 1, 2)
MMdigits = SUBSTR(TimeCode, 4, 2)
SSdigits = SUBSTR(TimeCode, 7, 2)
FFdigits = SUBSTR(TimeCode, 10,2)
IF (ValidateSMPTEdigits(HHdigits, 0, 23, 'hours') = FALSE) THEN
ITERATE loop
IF (ValidateSMPTEdigits(MMdigits, 0, 59, "minutes") = FALSE) THEN
ITERATE loop
IF (ValidateSMPTEdigits(SSdigits, 0, 59, "seconds") = FALSE) THEN
ITERATE loop
IF (ValidateSMPTEdigits(FFdigits, 0, 29, "frames") = FALSE) THEN
ITERATE loop
ValidTC = TRUE
END
/*
** Ask the user for the single frame edit limit threshold per cell.
*/
CALL "FREDSCRIPTS:FREDFunctions/GetANumber" '"'"Enter Single Frame" || NL || "edit limit per cell"'"' 300 2 900 TRUE
IF (RESULT = (2-1)) THEN
EXIT 10
SFlimit = RESULT
/*
** Update the clips.
*/
SETCLIP( "FREDSANTimeCode", TimeCode )
SETCLIP( "FREDSANSFlimit", SFlimit )
EXIT 0
/*
** Make sure a set of SMPTE digits is numeric and
** falls within the accepted range
*/
ValidateSMPTEdigits:
PARSE ARG STRdigits, MINdigits, MAXdigits, sectionText
IF ( DATATYPE(STRdigits, Numeric) = FALSE) THEN DO
Message = "Invalid SMPTE TimeCode" || NL ||,
"(" || sectionText STRdigits "not numeric)"
OKAY1 '"'Message'"'
return FALSE
END
IF (STRdigits < MINdigits) THEN DO
Message = "Invalid SMPTE TimeCode" || NL ||,
"(" || sectionText STRdigits "<" MINdigits || ")"
OKAY1 '"'Message'"'
return FALSE
END
IF (STRdigits > MAXdigits) THEN DO
Message = "Invalid SMPTE TimeCode" || NL ||,
"(" || sectionText STRdigits ">" MAXdigits || ")"
OKAY1 '"'Message'"'
return FALSE
END
return TRUE
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_
o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
** SaveToVT_BUFFER.fred
**
** $VER: SaveToVT_BUFFER.fred 1.0.0 (20.12.94)
**
** This program can be run from an InvokeADPro list to save
** images to the Video Toaster display board. Including this
** program automatically causes a .pre script to be executed as
** well (to select the DV channel and the Scale option).
**
** Clips Imported:
** FREDVTBuffer - Which Toaster DV channel to save the
** image in
** 1 = DV1
** 2 = DV2
** FREDVTScaleOpt - Scale option if image is not correct
** the correct Toaster frame size
** 0 = Do nothing,
** 1 = Scale to normal frame size
** 2 = Center on a backdrop
**
** NOTE: Clip names are case sensitive.
**
** This script requires FRED v1.4.0 (or higher) to run. Also
** required is ADPro v2.5.0 (or higher).
**
** Copyright 1994 SyntheToonz, Inc., Kenneth Jennings
** All Rights Reserved
**
** Internet: kenneth@daffy.aatech.com
*/
ADDRESS "ADPro"
OPTIONS RESULTS
PARSE ARG FrameNum FrameFName Length LoadFlag FirstCallSeq FirstCallCell
NL = '0A'X
SQ = '27'X
DQ = '22'X
TRUE = 1
FALSE = 0
ToasterWidth = 752
ToasterHeight = 480
/*
** Get the required clips.
*/
ToasterDV = GETCLIP( "FREDVTBuffer" )
IF (ToasterDV = "") THEN DO
ADPRO_TO_FRONT
OKAY1 "Required clip, FREDVTBuffer," || NL ||,
"is not specified."
SCREEN_TO_FRONT "FRED"
EXIT 10
END
ScaleOpt = GETCLIP( "FREDVTScaleOpt" )
IF (ScaleOpt = "") THEN DO
ADPRO_TO_FRONT
OKAY1 "Required clip, FREDVTScaleOpt," || NL ||,
"is not specified."
SCREEN_TO_FRONT "FRED"
EXIT 10
END
/*
** Check to see if Toaster is running
*/
IF (~SHOW( 'P', "ToasterARexx.port" )) THEN DO
ADPRO_TO_FRONT
OKAY1 "Switcher is not running!"
ADPRO_TO_BACK
EXIT 10
END
/*
** See what type of data is loaded in ADPro/MorphPlus.
*/
CALL "FREDSCRIPTS:FREDFunctions/CheckForRawImageData" TRUE
IF (RESULT ~= 0) THEN DO
ADPRO_TO_FRONT
OKAY1 "No RAW image data in memory!"
ADPRO_TO_BACK
EXIT 10
END
/*
** Check Image Size
*/
XSIZE
ImageWidth = ADPRO_RESULT
YSIZE
ImageHeight = ADPRO_RESULT
IF (ImageWidth ~= ToasterWidth) | (ImageHeight ~= ToasterHeight) THEN DO
IF (ScaleOpt = 1) THEN DO
/*
** MAKE it fit the Toaster frame buffer
*/
/*
** Adjust the pixel aspect of the image.
*/
OPERATOR "DEFINE_PXL_ASPECT" 22 26
IF (RC ~= 0) THEN DO
ADPRO_TO_FRONT
OKAY1 "Could not define pixel aspect ratio."
ADPRO_TO_BACK
EXIT 10
END
/*
** Scale the image to fill a ToasterWidth x ToasterHeight screen.
*/
ABS_SCALE ToasterWidth ToasterHeight
IF (RC ~= 0) THEN DO
ADPRO_TO_FRONT
OKAY1 "Could not scale to Toaster frame size."
ADPRO_TO_BACK
EXIT 10
END
END
IF (ScaleOpt = 2) THEN DO
/*
** CENTER the image on a backdrop
*/
/*
** Save current image to TEMP
*/
SAVER "TEMP" "XXX" "RAW"
IF (RC ~= 0) THEN DO
ADPRO_TO_FRONT
OKAY1 "Could not save image to TEMP."
ADPRO_TO_BACK
EXIT 10
END
/*
** Load a solid backdrop of the correct size
*/
LOADER "BACKDROP" "XXX" WIDTH ToasterWidth HEIGHT ToasterHeight COLOR FILL 40 40 100
IF (RC ~= 0) THEN DO
ADPRO_TO_FRONT
OKAY1 "Could not create a backdrop."
ADPRO_TO_BACK
EXIT 10
END
/*
** Load original image in center of backdrop
*/
CenterX = (ToasterWidth / 2) - (ImageWidth / 2)
CenterY = (ToasterHeight / 2) - (ImageHeight / 2)
LOADER "TEMP" "XXX" COMPOFFSET CenterX CenterY COMPMIX 100
IF (RC ~= 0) THEN DO
ADPRO_TO_FRONT
OKAY1 "Could not reload TEMP image."
ADPRO_TO_BACK
EXIT 10
END
END
END
/*
** Send image to the display board.
*/
SAVER "VT_BUFFER" "XXX" BUFFER ToasterDV
IF (RC ~= 0) THEN DO
Why = ADPRO_RESULT
ADPRO_TO_FRONT
OKAY1 "VT_BUFFER save failed:" || NL || Why || NL ||,
"Argument Information:" || NL ||,
"BUFFER = " || ToasterDV
SCREEN_TO_FRONT "FRED"
EXIT 10
END
EXIT 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_
o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
** SaveToVT_BUFFER.fred.pre
**
** $VER: SaveToVT_BUFFER.fred.pre 1.0.0 (20.12.94)
**
** If the SaveToVT_BUFFER.fred script appears in the InvokeADPro list,
** this program will ask the user to select the DV channel to display
** the image in, and the Scale option if the image isn't the correct size
** for a Toaster frame/image.
**
** Clips Exported:
** FREDVTBuffer - Which Toaster DV channel to save the
** image in
** 1 = DV1
** 2 = DV2
** FREDVTScaleOpt - Scale option if image is not correct
** the correct Toaster frame size
** 0 = Do nothing,
** 1 = Scale to normal frame size
** 2 = Center on a backdrop
**
** NOTE: Clip names are case sensitive.
**
** This script requires FRED v1.4.0 (or higher) to run. Also
** required is ADPro v2.5.0 (or higher).
**
** Copyright 1994 SyntheToonz, Inc., Kenneth Jennings
** All Rights Reserved
**
** Internet: kenneth@daffy.aatech.com
*/
ADDRESS "ADPro"
OPTIONS RESULTS
PARSE ARG NumberOfCells NumberOfFrames
NL = '0A'X
SQ = '27'X
DQ = '22'X
TRUE = 1
FALSE = 0
ADPRO_TO_FRONT
/*
** Ask how scaling (should it be necessary) will be done.
*/
OKAYN '"SaveToVT_BUFFER.fred"',
'"If image is not 752 x 480:"',
'" As Is | Scale | Center | Cancel "'
IF (RC = 0) THEN DO
SCREEN_TO_FRONT "FRED"
EXIT 10
END
ScaleOpt = RC - 1
/*
** Ask the user which Toaster DV channel to use.
*/
OKAYN '"SaveToVT_BUFFER.fred"',
'"Display image in which Toaster DV channel?"',
'" DV1 | DV2 | Cancel "'
IF (RC = 0) THEN DO
SCREEN_TO_FRONT "FRED"
EXIT 10
END
ToasterDV = RC
SCREEN_TO_FRONT "FRED"
/*
** Update the clips.
*/
SETCLIP( "FREDVTBuffer", ToasterDV )
SETCLIP( "FREDVTScaleOpt", ScaleOpt )
EXIT 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_ SNIP o_
o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\ SNIP o\
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
** TestBCDAREXX.fred
**
** $VER: TestBCDAREXX.fred 1.0.0 (20.12.94)
**
** Also required is ADPro v2.5.0 (or higher).
**
** Copyright 1994 SyntheToonz, Inc., Kenneth Jennings
** All Rights Reserved
**
** Internet: kenneth@daffy.aatech.com
**
** This script can be run from the shell: rx ScriptTest.fred
** or it can be called from FRED as part of a script list.
**
** Prior to running this script from the CLI I had running:
** 1: ADPro
** 2: FRED
** 3: Video Toaster Switcher
** 4: SANARexxHandler
** 5: The GVR-S950 was initialized with SANSETUP.BAT
** (And a previously striped tape was loaded)
**
** Because we use the Toaster, we go out of our way to make
** sure we don't have any strange commodities or other toys
** running on the system.
**
** System in use:
** A2000, GVP 33MHz 040, 16M RAM
** TBC II, TBC III, (neither one hooked to serial port)
** SunRize AD516, (not running or active during tests)
** 425M Quantum (int), 105M Quantum (ext), 88M Syquest (ext)
**
** NONE of the attempts to directly communicate with
** BCDAREXX.PORT in this script succeeded. In other words
** NOTHING happened to the deck, but no error was returned to
** the REXX host. The following command strings work when
** entered directly from a Shell/CLI:
**
** 6.>rx "ADDRESS BCDAREXX.PORT INIT
** 6.>rx "ADDRESS BCDAREXX.PORT INIT"
** 6.>rx "ADDRESS 'BCDAREXX.PORT' INIT"
** 6.>rx "ADDRESS BCDAREXX.PORT 'INIT'"
** 6.>rx "ADDRESS 'BCDAREXX.PORT' 'INIT'"
*/
ADDRESS "ADPro"
OPTIONS RESULTS
/* arguments are irrelavent for this script */
PARSE ARG FrameNum FrameFName Length LoadFlag FirstCallSeq FirstCallCell
RXPort = "BCDAREXX.PORT"
SCREEN_TO_FRONT "FRED"
/*
** Now, try to get deck to do something.
** INIT will just start rolling the tape and stop.
*/
/* This works. TELLSAN is a CLI utility to send commands to the deck */
address 'COMMAND' 'TELLSAN "INIT"'
OKAY1 "One"
/* This does not work.*/
ADDRESS BCDAREXX.PORT INIT
OKAY1 "Two"
/* This works */
ADDRESS 'COMMAND' 'RX "ADDRESS BCDAREXX.PORT INIT"'
OKAY1 "Three"
/* This works */
CmdString = RX '"'ADDRESS RXPort INIT'"'
OKAY1 CmdString
ADDRESS 'COMMAND' CmdString
OKAY "Four"
/* This works */
CmdString = RX '"'ADDRESS RXPort "INIT" '"'
OKAY1 CmdString
ADDRESS 'COMMAND' CmdString
OKAY "Five"
/* None of the remaining examples work */
/* Show that ADPro is current */
Adrs = ADDRESS()
OKAY1 Adrs
/* Set New Address to BCDAREXX.PORT */
ADDRESS VALUE RXPort
/* Show that BCDAREXX.PORT is current */
Adrs = ADDRESS()
ADDRESS "ADPro" OKAY1 '"'Adrs'"'
INIT
ADDRESS "ADPro" OKAY1 "Six"
'INIT'
ADDRESS "ADPro" OKAY1 "Seven"
"INIT"
ADDRESS "ADPro" OKAY1 "Eight"
/* Reset address to ADPro */
ADDRESS
Adrs = ADDRESS()
OKAY1 Adrs
/* One Last test */
CmdString = "ADDRESS" RXPort 'INIT'
OKAY1 CmdString
INTERPRET CmdString
OKAY1 "Nine"
EXIT 0
/* ************ FINISH *********** */